<?php
/**
 * 使用PHP curl扩展实现文件上传
 */

/**
 * 通过curl进行本地文件上传函数
 * @param   $url string  提交的服务器位置，需要字符串参数
 * @param   $srcFilePath string 本地需要上传的文件路径
 * @param   $postParam array 和上传文件一起提交给服务器的post数据
 * @return  array  服务器返回的信息，是一个数组，下标error表示状态(0失败1成功)errmsg为反馈消息,data为服务器返回消息
 */

//本地需要上传的文件路径
$srcFilePath=__FILE__.'\phpcms.zip';


//声明一个关联数组 通过post方式提交给服务器
$postParam=array("username"=>'gaoluofeng','age'=>30);

function uploadFile($url,$srcFilePath,$postParam)
{
	//如果PHP为5.5以上版本,使用curlFile
	if(version_compare(phpversion(),'5.5.0')>=0){
		$data=array('uploadfile'=>new CURLFile($srcFilePath));
		//部署环境是5.4(仅@语法),但开发环境5.6(仅CURLFile)
	}else{
		//将需要上传的本地文件路径放入一个数组,下标相当于上传文件的表单名称，路径前一定要有"@"符号
		$data=array(
			'object_file'=>'@'.$srcFilePath
		);
	}

	//将上传的信息和post提交的信息合并 这样可以一起传给服务器
	$data2=array_merge($postParam,$data);
	
	$ch=curl_init($url);//启动一个curl会话

	curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//设置获取内容但不输出
	curl_setopt($ch,CURLOPT_POST,true);//发送一个常规的post请求
	curl_setopt($ch,CURLOPT_POSTFIELDS,$data2);//post提交的数据包

	$response=curl_exec($ch);//执行操作

	if(curl_errno($ch)!=0){
		return array('errno'=>0,'errmsg'=>"上传失败:".curl_errno($ch),'data'=>'');
	}
	curl_close($ch);

	if(!$response){
		return array('errno'=>0,'errmsg'=>"文件$srcFilePath失败:response is empty",'data'=>'');
	}

	//上传成功返回成功的结果数组
	
	return array('errno'=>1,'errmsg'=>'ok','data'=>$response);
}



//调用uploadFile()方法，上传文件并且提交post数据

$arr=uploadFile("http://localhost/curl/curl_upload.php",$srcFilePath,$postParam);

print_r($arr);
print_r($_POST);